package net.openvision.music.composition.logical.parsing;

import java.io.IOException;
import java.io.InputStream;
import java.text.ParseException;

import net.openvision.music.composition.rules.RuleSet;
import net.openvision.util.parsing.DelimiterTokenReader;

public class TextRuleSetParser implements RuleSetParser {

//	public static final String RULESET_ID = "RULESET";
//	public static final String BLOCK_BEGIN = "{";
//	public static final String BLOCK_END = "}";
//
//	private TokenReader _in;
//	private Token lastToken;
//
//	private Token uncheckedReadToken() throws IOException {
//		lastToken = _in.readToken();
//		return lastToken;
//	}
//
//	private Token checkedReadToken() throws IOException, ParseException {
//		Token result = _in.readToken();
//		if (result == null)
//			throw new ParseException("Token expected after "
//					+ lastToken.getContent() + " but end of file reached.",
//					lastToken);
//		lastToken = result;
//		return result;
//	}
//
//	private Token checkedReadToken(String expected) throws IOException,
//			ParseException {
//		Token result = _in.readToken();
//		if (result == null)
//			throw new ParseException("Token expected after "
//					+ lastToken.getContent() + " but end of file reached.",
//					lastToken);
//		if (!result.getContent().equals(expected))
//			throw new ParseException(expected + " expected, but "
//					+ result.getContent() + " found.", result);
//		lastToken = result;
//		return result;
//	}
//
//	protected RuleSet parseRuleSet() throws IOException, ParseException {
//		Token name = checkedReadToken();
//		checkedReadToken(BLOCK_BEGIN);
//		RuleSet result = new RuleSet(name.getContent());
//		Object o = parseEntity();
//		while (!o.equals(BLOCK_END)) {
//			if (o instanceof ConstructionRule) {
//				result.add((ConstructionRule) o);
//			} else {
//				throw new ParseException("Unknown entity of type "
//						+ o.getClass().getName() + " found.", lastToken);
//			}
//		}
//		return result;
//	}
//	
//	protected ConstructionRule parseConstructionRule() throws IOException, ParseException  {
//		Token name = checkedReadToken();
//		checkedReadToken(BLOCK_BEGIN);
//		ElementClassConstructionRule result = new ElementClassConstructionRule();
//		return null;
//	}
//
//	protected Object parseEntity() throws IOException, ParseException {
//		Token type = uncheckedReadToken();
//		if (type == null) // EOF reached
//			return null;
//		else if (type.getContent().equals(BLOCK_END))
//			return BLOCK_END;
//		else {
//			if (type.getContent().equals(RULESET_ID)) {
//				return parseRuleSet();
//			} else {
//				return null; /*...*/
//			}
//		}
//	}

	@Override
	public RuleSet[] parse(InputStream reader) throws IOException, ParseException, IllegalAccessException, InstantiationException {
		/*DelimiterTokenReader _in = new DelimiterTokenReader(reader, true, '(', ')', '{', '}', ',',
				'[', ']', ';', '=');*/
		

		return null;
	}

}
